package com.gg.api.msm.service.impl;

import com.cloopen.rest.sdk.CCPRestSmsSDK;
import com.gg.api.msm.service.MessageApiService;
import com.gg.registration.vo.msm.MsmVo;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;

import javax.annotation.Resource;
import java.util.HashMap;
import java.util.Set;

/**
 * Author：  chenjunjia
 * Date：    2022/4/19 13:24
 * WeChat：  China_JoJo_
 */
@Service
public class MessageApiServiceImpl implements MessageApiService {

    /**
     * ACOUNT SID 和 AUTH TOKEN在登陆官网后，在“应用-管理控制台”中查看开发者主账号获取
     *
     * 正式上线需要使用自己创建的应用的App ID
     * APP ID的获取：登陆官网，在“应用-应用列表”，点击应用名称，看应用详情获取APP ID
     *
     * templa id : 模板id，在平台上创建的短信模板的ID值，测试的时候可以使用系统的默认模板，id为1。
     */
    private final String ACOUNT_SID = "8aaf0708802d0d8501803f8b06d2039f";
    private final String ACOUNT_TOKEN = "918bc1c1ca824f62ab1f79772e888a3a";
    private final String APP_ID = "8aaf0708802d0d8501803f8b07ea03a6";//测试用
    private final String TEMPLATE_ID = "1";
    private final String SERVER_IP = "sandboxapp.cloopen.com";
    private final String SERVER_PORT = "8883";

    /**
     * 发送手机验证码
     * @param phone 手机号
     * @param code  程序生成随机的验证码
     * @return 发送成功or失败
     */
    @Override
    public boolean send(String phone, String code) {
        //若手机为空
        if (StringUtils.isEmpty(phone)) return false;

        //========开始发送手机验证码========//

        HashMap<String, Object> result = null;
        //初始化SDK
        CCPRestSmsSDK restAPI = new CCPRestSmsSDK();
        //初始化服务器IP地址和端口
        restAPI.init(SERVER_IP, SERVER_PORT);
        //初始化主帐号和主帐号令牌
        restAPI.setAccount(ACOUNT_SID,ACOUNT_TOKEN);
        //初始化应用ID
        restAPI.setAppId(APP_ID);
        //发送
        result = restAPI.sendTemplateSMS(phone,TEMPLATE_ID,new String[] {code,"5"});

        if("000000".equals(result.get("statusCode"))){
            //正常返回输出data包体信息（map）
            HashMap<String,Object> data = (HashMap<String, Object>) result.get("data");
            Set<String> keySet = data.keySet();
            for(String key:keySet){
                Object object = data.get(key);
                System.out.println(key +" = "+object);
            }
            return true;
        }else{
            //异常返回输出错误码和错误信息
            System.out.println("错误码=" + result.get("statusCode") +" 错误信息= "+result.get("statusMsg"));
            return false;
        }
    }

    @Override
    public boolean send(HashMap smsMap) {
        if(!StringUtils.isEmpty(smsMap.get("phone"))) {
            String code = (String)smsMap.get("code");
            return this.send(smsMap.get("phone").toString(),code);
        }
        return false;
    }
}
